import matplotlib.pyplot as plt
import numpy as np

# x = np.linspace(-5, 5, 200)  # 从-5到5的200个数据
# y1 = 2 * x + 1
# y2 = x ** 2
# plt.figure(num=1, figsize=(8, 5))
# plt.plot(x, y2)
# plt.plot(x, y1, color='red', linewidth=1.0, linestyle='--')
# plt.show()
# print('-----------------')

# 例1.43
# plt.xlim((-2, 2))
# plt.ylim((-3, 3))
# plt.xlabel('wide')
# plt.ylabel('long')
# plt.show()

# 例1.44
# n = 1024
# X = np.random.normal(0, 1, n)  # 均值为0，方差为1的n个数值
# Y = np.random.normal(0, 1, n)  # Y值
# T = np.arctan2(Y, X)  # 批量计算反正切
# plt.scatter(X, Y, s=75, c=T, alpha=.5)  # s表示大小，是一个标量或一个shape为(n,)的数组
# plt.xlim(-1.5, 1.5)
# plt.xticks(np.arange(-1.5, 1.5, step=0.2), color='blue', rotation=60)
# plt.ylim(-1.5, 1.5)
# plt.yticks(np.arange(-1.5, 1.5, step=0.2), color='green')
# plt.show()

# 例1.45
# 向上向下分别生成12个数据，X为0到11的整数，Y是相应的均匀分布的随机数据，使用的函数时plt.bar，参数为X和Y。结果如下：
# n = 12
# X = np.arange(n)
# Y1 = (1 - X / float(n)) * np.random.uniform(0.5, 1.0, n)
# Y2 = (1 - X / float(n)) * np.random.uniform(0.5, 1.0, n)
# plt.bar(X, +Y1)
# plt.bar(X, -Y2)
# plt.xlim(-.5, n)
# plt.xticks(())
# plt.ylim(-1.25, 1.25)
# plt.yticks(())
# plt.show()

# 例1.46
# 使用matplotlib.pylot画等高线，代码如下：
# def f(x, y):
#     return (1 - x / 2 + x ** 5 + y ** 3) * np.exp(-x ** 2 - y ** 2)
#
# n = 256
# x = np.linspace(-3, 3, n)
# y = np.linspace(-3, 3, n)
# X, Y = np.meshgrid(x, y)
# # 使用plt.contourf函数把颜色加入，位置参数分别为X，Y，f(X,Y)，透明度为0.75，并将f(X,Y)的值对应到color map的暖色组中寻找对应颜色。
# plt.contourf(X, Y, f(X, Y), 8, alpha=.75, cmap=plt.cm.hot)
# C = plt.contour(X, Y, f(X, Y), 8, colors='black', linewidth=.5)
# plt.show()

# 例1.47
# 使用matplotlib.subplot将许多小图放在一张大图里显示。
plt.figure()
plt.subplot(2, 2, 1)  # 使用plt.subplot来创建子图。
plt.plot([0, 1], [0, 1])
plt.subplot(2, 2, 2)
plt.plot([0, 1], [0, 2])
plt.subplot(223)
plt.plot([0, 1], [0, 3])
plt.subplot(224)
plt.plot([0, 1], [0, 4])
plt.show()
